package com.sojson.constant;

import com.sojson.util.StringUtil;
import com.sojson.util.servlet.ServletUtil;
import com.sojson.util.text.Convert;

/**
 * 从属性文件中获取的静态属性
 *
 * @author liu
 * @date 2020-11-02
 */
public interface ConstantByMap {

    // =======================================================================================================
    // ===============================================华丽的分割线===============================================
    // =======================================================================================================
    /** 环境代码(1:正式环境,2:测试环境) */
    Integer ENVIRONMENT = Convert.toInt(Constant.PROPERTIES.getProperty("so.environment"), 2);
    // =======================================================================================================
    // ===============================================华丽的分割线===============================================
    // =======================================================================================================
    /** 加密解密默认密钥(如果下面的密钥不存在就用这个),不设置为aiwohdhdwanldwandwadiwahndiadwadwah */
    String DEFAULT_KEY = Convert.toStr(Constant.PROPERTIES.getProperty("so.application.default.key"),
        "aiwohdhdwanldwandwadiwahndiadwadwah");
    // =======================================================================================================
    // ===============================================华丽的分割线===============================================
    // =======================================================================================================
    /** 本地页面文件的后缀,不设置为.ftl */
    String THIS_LOCALITY_PAGE_SUFFIX =
        Convert.toStr(Constant.PROPERTIES.getProperty("so.page.thisLocality.suffix"), ".ftl");
    /** 远程页面文件的后缀,不设置为.html */
    String LONG_RANGE_PAGE_SUFFIX = Convert.toStr(Constant.PROPERTIES.getProperty("so.page.longRange.suffix"), ".html");
    // =======================================================================================================
    // ===============================================华丽的分割线===============================================
    // =======================================================================================================
    /** 全局缓存持久化的时候为了和其他属性区分加的前缀,不设置为SojsonCache(别加任何符号,因为这是项目全局通用的) */
    String CACHE_NAME_PREFIX = Constant.PROPERTIES.getProperty(ConstantCache.KEY_PREFIX) + StringUtil.J;
    // =======================================================================================================
    // ===============================================华丽的分割线===============================================
    // =======================================================================================================
    /** Token解析或加密时的密钥 */
    String TOKEN_SECRET =
        Convert.toStr(Constant.PROPERTIES.getProperty("so.token.secret"), "F891DEEE3A764C1B88DFC4B94B5F6636");
    /** Token字符串在请求头和响应头中的名字,默认为token */
    String TOKEN_NAME = Convert.toStr(Constant.PROPERTIES.getProperty("so.token.name"), "token");
    /** Token在请求域中存储时的名字,不设置为token_request_id:+${so.token.name} */
    String TOKEN_REQUEST_NAME =
        Convert.toStr(Constant.PROPERTIES.getProperty("so.token.request.name"), "token_request_id:" + TOKEN_NAME);
    /** Token在缓存中存储时的前缀,不设置为token_id: */
    String TOKEN_CACHE_PREFIX =
        Convert.toStr(Constant.PROPERTIES.getProperty("so.token.cache.prefix"), "token_id:");
    /**
     * 获取在缓存中所有Token的查询语句:"*Token前缀*",
     * 获取所有Token
     */
    String TOKEN_CACHE_ALL = "*" + TOKEN_CACHE_PREFIX + "*";
    /** 在线用户的前缀,不设置为online_user_id: */
    String ONLINE_USER_PREFIX =
        Convert.toStr(Constant.PROPERTIES.getProperty("so.token.onlineUserPrefix"), "online_user_id:");
    // =======================================================================================================
    // ===============================================华丽的分割线===============================================
    // =======================================================================================================
    /** 开放页面 */
    String CONTROLLER_MAPPING_OPEN_OPEN =
        Convert.toStr(Constant.PROPERTIES.getProperty("so.controller.mapping.open"), "/open");
    /** 第三方接口路径 */
    String CONTROLLER_MAPPING_OPEN_OTHER =
        Convert.toStr(Constant.PROPERTIES.getProperty("so.controller.mapping.other"), "/other");
    /** 登录页面 */
    String CONTROLLER_URL_OPEN_LOGIN_URL =
        Convert.toStr(Constant.PROPERTIES.getProperty("so.controller.url.open.loginUrl"),
            CONTROLLER_MAPPING_OPEN_OPEN + "/user/toLogin");
    /** 登录页面全路径 */
    String CONTROLLER_URL_OPEN_LOGIN_URL_ALL = ServletUtil.getMappingUrl(CONTROLLER_URL_OPEN_LOGIN_URL);
    /** 成功页面,暂时不知道是啥 */
    String CONTROLLER_URL_OPEN_SUCCESS_URL = Convert
        .toStr(Constant.PROPERTIES.getProperty("so.controller.url.open.successUrl"), CONTROLLER_MAPPING_OPEN_OPEN + "");
    /** 权限不足的错误提示页面 */
    String CONTROLLER_URL_OPEN_UNAUTHORIZED_URL = Convert.toStr(
        Constant.PROPERTIES.getProperty("so.controller.url.open.unauthorizedUrl"), CONTROLLER_MAPPING_OPEN_OPEN + "");
    /** 权限不足的错误提示页面全路径 */
    String CONTROLLER_URL_OPEN_UNAUTHORIZED_URL_ALL = ServletUtil.getMappingUrl(CONTROLLER_URL_OPEN_UNAUTHORIZED_URL);
    /** 用户在其他地方登录，踢出原登录用户跳转的提示页面 */
    String CONTROLLER_URL_OPEN_KICKOUT_URL = Convert
        .toStr(Constant.PROPERTIES.getProperty("so.controller.url.open.kickoutUrl"), CONTROLLER_MAPPING_OPEN_OPEN + "");
    /** 远程页面路径,不配置为http://localhost:8080/sojson-web/template */
    String CONTROLLER_URL_LONG_RANGE_PAGE =
        Convert.toStr(Constant.PROPERTIES.getProperty("so.controller.url.longRangePage"),
            "http://localhost:8080/sojson-web/template/");
    // =======================================================================================================
    // ===============================================华丽的分割线===============================================
    // =======================================================================================================
    /** 资源目录路径 */
    String CLASSPATH_ = "classpath:";
    /** 资源目录路径 */
    String CLASSPATHX_ = "classpath*:";
    // =======================================================================================================
    // ===============================================华丽的分割线===============================================
    // =======================================================================================================
    /** 包基础路径 */
    String PACKAGE_BASE = Convert.toStr(Constant.PROPERTIES.getProperty("so.package.base"), "com.sojson");
    /** 缓存存储根目录(默认为/project) */
    String LOG_PATH_ROOT = Convert.toStr(Constant.PROPERTIES.getProperty("so.log.directory.root"), "/project");
    /** 日志输出路径(默认为${so.log.directory.root}/logs) */
    String LOG_PATH_LOGS =
        Convert.toStr(Constant.PROPERTIES.getProperty("so.log.directory.logs"), LOG_PATH_ROOT + "/logs");
    /** 资源文件复制到的基础路径(默认为${so.log.directory.root}/classpath) */
    /** 允许外界访问的文件的基础路径(默认为${so.log.directory.root}/open) */
    String LOG_PATH_OPEN =
        Convert.toStr(Constant.PROPERTIES.getProperty("so.log.directory.open"), LOG_PATH_ROOT + "/open");
    /** 本地目录存放文件的基础路径(默认为${"so.log.directory.open"}) */
    String LOG_PATH_FILE_SYSTEM_THIS_DIRECTORY_BUCKET_NAME_BASE = Convert
        .toStr(Constant.PROPERTIES.getProperty("so.log.fileSystem.thisDirectory.bucketName.base"), LOG_PATH_OPEN);
    /** 图片文件基础路径 */
    String IMG_PATH = "/image";
    /** 图片默认基础路径 */
    String DEFAULT = IMG_PATH + "/default";
    /** excel文件基础路径 */
    String EXCEL_PATH = "/excel";
    /** 用户默认头像 */
    String DEFAULT_HEAD = "/image/head/defaultHead.png";
    // =======================================================================================================
    // ===============================================华丽的分割线===============================================
    // =======================================================================================================
    /** session的cookie的名字,默认为JSESSIONID */
    String SESSION_COOKIE_NAME = Convert.toStr(Constant.PROPERTIES.getProperty("so.session.cookie.name"), "JSESSIONID");
    /** sessionID存储时的前缀(sessionID在缓存中的前缀),不设置为cache-session-id: */
    String SESSION_CACHE_PREFIX =
        Convert.toStr(Constant.PROPERTIES.getProperty("so.session.cache.prefix"), "cache-session-id:");
    /** 在线用户的前缀,不设置为online_user_id: */
    String SESSION_ONLINE_USER_PREFIX =
        Convert.toStr(Constant.PROPERTIES.getProperty("so.session.onlineUserPrefix"), "online_user_id:");
    /** 踢出状态在session的attribute中的key,true标示踢出,不设置为sojson-online-status */
    String SESSION_ONLINE_STATUS =
        Convert.toStr(Constant.PROPERTIES.getProperty("so.session.onlineStatus"), "sojson-online-status");
    /** 用户记住我功能的cookie的名字,不设置为v_v-re-sojson */
    String REMEMBERME_COOKIE_NAME =
        Convert.toStr(Constant.PROPERTIES.getProperty("so.rememberMe.cookie.name"), "v_v-re-sojson");
    /** cookie记住我时保存要加密,加密字符串,不设置只用记住我功能会报错,提示关键参数不存在 */
    String REMEMBERME_COOKIE_KEYS =
        Convert.toStr(Constant.PROPERTIES.getProperty("so.rememberMe.cookie.keys"), DEFAULT_KEY);
    /**
     * 获取在redis中所有session的查询语句:"*sessionID前缀:*",
     * 获取所有session,这里有个小BUG，因为Redis使用序列化后，Key反序列化回来发现前面有一段乱码，解决的办法是存储缓存不序列化
     */
    String REDIS_SESSION_ALL = "*" + SESSION_CACHE_PREFIX + "*";

}